home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / wb / czesc_4 / startwindow / source / startwindows.c < prev    next >
C/C++ Source or Header  |  1994-11-02  |  18KB  |  630 lines

  1. /*
  2.  *  Source machine generated by GadToolsBox V2.0b
  3.  *  which is (c) Copyright 1991-1993 Jaba Development
  4.  *
  5.  *  GUI Designed by : -- Heinz Reinert --
  6.  */
  7. #include <exec/types.h>
  8. #include <string.h>
  9. #include <intuition/intuition.h>
  10. #include <intuition/classes.h>
  11. #include <intuition/classusr.h>
  12. #include <intuition/imageclass.h>
  13. #include <intuition/gadgetclass.h>
  14. #include <libraries/gadtools.h>
  15. #include <graphics/displayinfo.h>
  16. #include <graphics/GfxBase.h>
  17. #include <clib/exec_protos.h>
  18. #include <clib/intuition_protos.h>
  19. #include <clib/gadtools_protos.h>
  20. #include <clib/graphics_protos.h>
  21. #include <clib/utility_protos.h>
  22. #include <proto/intuition.h>
  23. #include <proto/graphics.h>
  24. #include <proto/exec.h>
  25. #include <proto/dos.h>
  26. #include <proto/gadtools.h>
  27. #include <exec/memory.h>
  28.  
  29. /**********************************************/
  30. #define GetString( g )      ((( struct StringInfo * )g->SpecialInfo )->Buffer  )
  31. #define GetNumber( g )      ((( struct StringInfo * )g->SpecialInfo )->LongInt )
  32.  
  33. #define GD_list                                0
  34. #define GD_gadtxt                              1
  35. #define GD_command                             2
  36. #define GD_command2                            3
  37. #define GD_new                                 4
  38. #define GD_del                                 5
  39. #define GD_start                               6
  40. #define GD_save                                7
  41.  
  42. #define GDX_list                               0
  43. #define GDX_gadtxt                             1
  44. #define GDX_command                            2
  45. #define GDX_command2                           3
  46. #define GDX_new                                4
  47. #define GDX_del                                5
  48. #define GDX_start                              6
  49. #define GDX_save                               7
  50.  
  51. #define Project0_CNT 8
  52. UBYTE *vers = "\0$VER: StartWindow 2";
  53.  
  54. extern struct IntuitionBase *IntuitionBase;
  55. extern struct Library       *GadToolsBase;
  56.  
  57. extern struct Screen        *Scr;
  58. extern UBYTE                 *PubScreenName;
  59. extern APTR                  VisualInfo;
  60. extern struct Window        *Project0Wnd;
  61. extern struct Gadget        *Project0GList;
  62. extern struct Gadget        *Project0Gadgets[8];
  63. extern UWORD                 Project0Left;
  64. extern UWORD                 Project0Top;
  65. extern UWORD                 Project0Width;
  66. extern UWORD                 Project0Height;
  67. extern UBYTE                *Project0Wdt;
  68. extern struct TextAttr       topaz8;
  69. extern UWORD                 Project0GTypes[];
  70. extern struct NewGadget      Project0NGad[];
  71. extern ULONG                 Project0GTags[];
  72.  
  73.  
  74. extern int SetupScreen( void );
  75. extern void CloseDownScreen( void );
  76. extern int OpenProject0Window( void );
  77. extern void CloseProject0Window( void );
  78.  
  79. /**********************************************/
  80.  
  81. struct Screen         *Scr = NULL;
  82. UBYTE                 *PubScreenName = NULL;
  83. APTR                   VisualInfo = NULL;
  84. struct Window         *Project0Wnd = NULL;
  85. struct Gadget         *Project0GList = NULL;
  86. struct Gadget         *Project0Gadgets[8];
  87. UWORD                  Project0Left = 440;
  88. UWORD                  Project0Top = 10;
  89. UWORD                  Project0Width = 190;
  90. UWORD                  Project0Height = 0;
  91. UBYTE                 *Project0Wdt = (UBYTE *)"StartWindow2";
  92.  
  93. struct TextAttr topaz8 = {
  94.         ( STRPTR )"topaz.font", 8, 0x00, 0x01 };
  95.  
  96. UWORD Project0GTypes[] = {
  97.         LISTVIEW_KIND,
  98.         STRING_KIND,
  99.         STRING_KIND,
  100.         STRING_KIND,
  101.         BUTTON_KIND,
  102.         BUTTON_KIND,
  103.         BUTTON_KIND,
  104.         BUTTON_KIND
  105. };
  106.  
  107. struct NewGadget Project0NGad[] = {
  108.         4, 2, 160, 88, NULL, NULL, GD_list, 0, NULL, NULL,
  109.         4, 86, 161, 12, NULL, NULL, GD_gadtxt, 0, NULL, NULL,
  110.         4, 98, 161, 12, NULL, NULL, GD_command, 0, NULL, NULL,
  111.         4, 110, 161, 12, NULL, NULL, GD_command2, 0, NULL, NULL,
  112.         4, 122, 54, 11, (UBYTE *)"NEW", NULL, GD_new, PLACETEXT_IN, NULL, NULL,
  113.         114, 122, 51, 11, (UBYTE *)"DEL", NULL, GD_del, PLACETEXT_IN, NULL, NULL,
  114.         4, 133, 161, 13, (UBYTE *)"RUN", NULL, GD_start, PLACETEXT_IN, NULL, NULL,
  115.         59, 122, 54, 11, (UBYTE *)"SAVE", NULL, GD_save, PLACETEXT_IN, NULL, NULL
  116. };
  117.  
  118. ULONG Project0GTags[] = {
  119.         (TAG_DONE),
  120.         (GTST_MaxChars), 256, (TAG_DONE),
  121.         (GTST_MaxChars), 256, (TAG_DONE),
  122.         (GTST_MaxChars), 256, (TAG_DONE),
  123.         (TAG_DONE),
  124.         (TAG_DONE),
  125.         (TAG_DONE),
  126.         (TAG_DONE)
  127. };
  128.  
  129. int SetupScreen( void )
  130. {
  131.         if ( ! ( Scr = LockPubScreen( PubScreenName )))
  132.                 return( 1L );
  133.  
  134.         if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  135.                 return( 2L );
  136.  
  137.         return( 0L );
  138. }
  139.  
  140. void CloseDownScreen( void )
  141. {
  142.         if ( VisualInfo ) {
  143.                 FreeVisualInfo( VisualInfo );
  144.                 VisualInfo = NULL;
  145.         }
  146.  
  147.         if ( Scr        ) {
  148.                 UnlockPubScreen( NULL, Scr );
  149.                 Scr = NULL;
  150.         }
  151. }
  152.  
  153. int OpenProject0Window( void )
  154. {
  155.         struct NewGadget        ng;
  156.         struct Gadget   *g;
  157.         UWORD           lc, tc;
  158.         UWORD           offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  159.  
  160.         if ( ! ( g = CreateContext( &Project0GList )))
  161.                 return( 1L );
  162.  
  163.         for( lc = 0, tc = 0; lc < Project0_CNT; lc++ ) {
  164.  
  165.                 CopyMem((char * )&Project0NGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  166.  
  167.                 ng.ng_VisualInfo = VisualInfo;
  168.                 ng.ng_TextAttr   = &topaz8;
  169.                 ng.ng_LeftEdge  += offx;
  170.                 ng.ng_TopEdge   += offy;
  171.  
  172.                 Project0Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project0GTypes[ lc ], g, &ng, ( struct TagItem * )&Project0GTags[ tc ] );
  173.  
  174.                 while( Project0GTags[ tc ] ) tc += 2;
  175.                 tc++;
  176.  
  177.                 if ( NOT g )
  178.                         return( 2L );
  179.         }
  180.  
  181.         if ( ! ( Project0Wnd = OpenWindowTags( NULL,
  182.                                 WA_Left,        Project0Left,
  183.                                 WA_Top,         Project0Top,
  184.                                 WA_Width,       Project0Width,
  185.                                 WA_Height,      Project0Height + offy,
  186.                                 WA_IDCMP,       LISTVIEWIDCMP|
  187.                                                 BUTTONIDCMP|
  188.                                                 STRINGIDCMP|
  189.                                                 IDCMP_NEWSIZE|
  190.                                                 IDCMP_MENUPICK|
  191.                                                 IDCMP_CLOSEWINDOW|
  192.                                                 IDCMP_CHANGEWINDOW|
  193.                                                 IDCMP_INTUITICKS |
  194.                                                 IDCMP_MOUSEBUTTONS|
  195.                                                 IDCMP_REFRESHWINDOW,
  196.                                 WA_Flags,       WFLG_SIZEGADGET|
  197.                                                 WFLG_DRAGBAR|
  198.                                                 WFLG_DEPTHGADGET|
  199.                                                 WFLG_CLOSEGADGET|
  200.                                                 WFLG_SMART_REFRESH,
  201.                                 WA_Gadgets,     Project0GList,
  202.                                 WA_Title,       Project0Wdt,
  203.                                 WA_ScreenTitle, "StartWindow2 Heinz Reinert 1994 ",
  204.                                 WA_PubScreen,   Scr,
  205.                                 WA_MinWidth,    190,
  206.                                 WA_MinHeight,   160,
  207.                                 WA_MaxWidth,    190,
  208.                                 WA_MaxHeight,   160,
  209.                                 TAG_DONE )))
  210.         return( 4L );
  211.  
  212.         GT_RefreshWindow( Project0Wnd, NULL );
  213.  
  214.         return( 0L );
  215. }
  216.  
  217. void CloseProject0Window( void )
  218. {
  219.         if ( Project0Wnd        ) {
  220.                 CloseWindow( Project0Wnd );
  221.                 Project0Wnd = NULL;
  222.         }
  223.  
  224.         if ( Project0GList      ) {
  225.                 FreeGadgets( Project0GList );
  226.                 Project0GList = NULL;
  227.         }
  228. }
  229. /*********************************************/
  230.  
  231. /* Main Program Part */
  232.  
  233. /* Structur for Data-Entries */
  234.  
  235. struct PRJ {
  236.  
  237.     char    Name[0];
  238.  
  239.     char    gadtxt[20];
  240.     char    command[75];
  241.     char    command2[75];
  242.     USHORT  new;
  243.     USHORT  del;
  244.     USHORT  save;
  245.     USHORT  req;
  246.     USHORT  start;
  247. };
  248.  
  249. struct PRJnode {
  250.         struct  Node n;
  251.         struct  PRJ d;
  252. };
  253.  
  254. /* PRJ-Nodes are in this List */
  255.  
  256. struct List prjlist;
  257.  
  258. /* The actual Entry */
  259.  
  260. struct PRJnode *currentprj;
  261.  
  262. /* String-Gadgets */
  263.  
  264. void gt_SetString( struct Gadget        *gad,
  265.                                    struct Window        *w,
  266.                                    char                         *string )
  267. {
  268.         GT_SetGadgetAttrs( gad, w, NULL, GTST_String, string, TAG_DONE );
  269. }
  270.  
  271. char * gt_GetString( struct Gadget      *gad )
  272. {
  273.         struct StringInfo *si = gad->SpecialInfo;
  274.  
  275.         if( si )
  276.                 return( ( char * ) si->Buffer );
  277.         else
  278.                 return( NULL );
  279. }
  280.  
  281. /* Manage Lists for Listview-Gadgets */
  282. /* Add List */
  283.  
  284. void gt_AttachList(     struct Gadget   *lv,
  285.                                         struct Window   *w,
  286.                                         struct List     *list )
  287. {
  288.         GT_SetGadgetAttrs( lv, w, NULL, GTLV_Labels, list, TAG_DONE );
  289. }
  290.  
  291. /* Put Actuel Entry */
  292.  
  293. void gt_SetLV( struct Gadget    *gad,
  294.                            struct Window        *w,
  295.                            ULONG                        value)
  296. {
  297.         GT_SetGadgetAttrs( gad, w, NULL, GTLV_Selected, value, TAG_DONE );
  298. }
  299.  
  300. /* get x-Entry from Exec-List */
  301.  
  302. struct Node * gt_GetListEntry( struct List *l,
  303.                                                            int num )
  304. {
  305.         int count = 0;
  306.         struct Node *n = l->lh_Head;
  307.  
  308.         while( n->ln_Succ )
  309.         {
  310.                 if( num==count ) return( n );
  311.                 n = n->ln_Succ;
  312.                 count++;
  313.         }
  314.         return( NULL );
  315. }
  316.  
  317. /* Number of a Node in List? */
  318.  
  319. int gt_GetListEntryNum( struct List *l,
  320.                                                 struct Node *n )
  321. {
  322.         int count = 0;
  323.         struct Node *r = l->lh_Head;
  324.  
  325.         while( r->ln_Succ )
  326.         {
  327.                 if( r==n ) return( count );
  328.                 r = r->ln_Succ;
  329.                 count++;
  330.         }
  331.         return( -1 );
  332. }
  333.  
  334. /* Count Entries of List */
  335.  
  336. int gt_GetListNumEntries( struct List *l )
  337. {
  338.         int count = 0;
  339.         struct Node *n = l->lh_Head;
  340.  
  341.         while( n->ln_Succ )
  342.         {
  343.                 n = n->ln_Succ;
  344.                 count++;
  345.         }
  346.  
  347.         return( count );
  348. }
  349.  
  350. /************************************************************************/
  351.  
  352. /* Load Command.DAT */
  353.  
  354. void loadprjlist( void )
  355. {
  356.         struct PRJ new;
  357.         struct PRJnode *n;
  358.         BPTR f;
  359.  
  360.         /* Init List */
  361.         NewList( &prjlist );
  362.         currentprj = NULL;
  363.  
  364.         /* Open Command.DAT */
  365.         f = Open( "S:Command.DAT", MODE_OLDFILE );
  366.         if( !f )
  367.                 return;
  368.  
  369.         /* Inputs read in */
  370.         while( Read( f, &new, sizeof( new ) ) == sizeof( new ) )
  371.         {
  372.                /* New Node */
  373.                 n = AllocVec( sizeof( *n ), 0 );
  374.                 if( !n )
  375.                         break;
  376.  
  377.         /* Copy Structur and add to List */
  378.                 n->d = new;
  379.                 n->n.ln_Name = n->d.Name;
  380.                 n->n.ln_Pri      = - n->d.Name[0];
  381.                 Enqueue( &prjlist, (struct Node *) n );
  382.         }
  383.  
  384.         Close( f );
  385. }
  386.  
  387. /* Saves List and Frees it */
  388. void save_and_freeprjlist( void )
  389. {
  390.         struct PRJnode *n;
  391.         BPTR f;
  392.  
  393.         f = Open( "S:Command.DAT", MODE_NEWFILE );
  394.  
  395.         while( ( n = (struct PRJnode * ) RemHead( &prjlist ) ) )
  396.         {
  397.             /* Save Node */
  398.                 if( f )
  399.                         Write( f, &n->d, sizeof( struct PRJ ) );
  400.             /* Free Node */
  401.                 FreeVec( n );
  402.         }
  403.  
  404.         if( f )
  405.                 Close( f );
  406. }
  407.  
  408.  
  409. /************************************************************************/
  410.  
  411. /* Puts actual Structur-Values to Gadgets */
  412.  
  413. void setgadvals( void )
  414. {
  415.  
  416.         if( !currentprj )
  417.             return;
  418.  
  419.         gt_SetString(   Project0Gadgets[ GD_gadtxt ], Project0Wnd,
  420.                                                        currentprj->d.Name );
  421.  
  422.         gt_SetString(   Project0Gadgets[ GD_command ], Project0Wnd,
  423.                                                     currentprj->d.command );
  424.  
  425.         gt_SetString(   Project0Gadgets[ GD_command2 ], Project0Wnd,
  426.                                                     currentprj->d.command2 );
  427.  
  428. }
  429.  
  430. /* Create a new Empty Input */
  431.  
  432. void newprj( void )
  433. {
  434.         struct PRJnode *new;
  435.  
  436.         new = AllocVec( sizeof( *new ), MEMF_CLEAR );
  437.  
  438.         if( !new )
  439.                 return;
  440.  
  441.         currentprj = new;
  442.  
  443.         new->n.ln_Name = new->d.Name;
  444.  
  445.         strcpy( new->d.Name, "new" );
  446.  
  447.         gt_AttachList( Project0Gadgets[GD_list], Project0Wnd,
  448.                                                       (struct List *) ~0 );
  449.  
  450.         new->n.ln_Pri    = - new->d.Name[0];
  451.         Enqueue( &prjlist, (struct Node *) new );
  452.  
  453.         gt_AttachList( Project0Gadgets[GD_list], Project0Wnd, &prjlist );
  454.  
  455.         gt_SetLV( Project0Gadgets[GD_list], Project0Wnd,
  456.                                      gt_GetListEntryNum( &prjlist, new ) );
  457.         setgadvals();
  458. }
  459.  
  460. /* Work on Gadget-Event */
  461. void dogadup( struct IntuiMessage *im )
  462. {
  463.         struct Gadget *g = im->IAddress;
  464.  
  465.         switch( g->GadgetID )
  466.         {
  467.  
  468. /*** Enter List ***/
  469. case GD_list:
  470.         currentprj = (struct PRJnode *) gt_GetListEntry( &prjlist, im->Code );
  471.         setgadvals();
  472.         break;
  473.  
  474. /*** New ***/
  475. case GD_new:
  476.         newprj();
  477.         break;
  478.  
  479. /*** Delete ***/
  480. case GD_del:
  481.         if( currentprj )
  482.         {
  483.         gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd,
  484.                                                        (struct List *) ~0 );
  485.         Remove( currentprj );
  486.         FreeVec( currentprj );
  487.         currentprj = FALSE;
  488.         gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd, &prjlist );
  489.         gt_SetLV( Project0Gadgets[ GD_list ], Project0Wnd, ~0 );
  490.         }
  491.         break;
  492. /*** Program Name ***/
  493. case GD_gadtxt:
  494.         if( currentprj )
  495.         {
  496.         gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd,
  497.                                                          (struct List *) ~0 );
  498.    strcpy( currentprj->d.Name, gt_GetString( Project0Gadgets[ GD_gadtxt ] ) );
  499.         gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd, &prjlist );
  500.         }
  501.         break;
  502.  
  503. /*** Command-string ***/
  504. case GD_command:
  505.         if( currentprj )
  506.         strcpy( currentprj->d.command,
  507.                              gt_GetString( Project0Gadgets[ GD_command ] ) );
  508.         break;
  509.  
  510. /*** Command-string ***/
  511. case GD_command2:
  512.         if( currentprj )
  513.         strcpy( currentprj->d.command2,
  514.                              gt_GetString( Project0Gadgets[ GD_command2 ] ) );
  515.         break;
  516.  
  517. /*** Start Program ***/
  518. case GD_start:
  519.         Execute(currentprj->d.command, NULL, Output());
  520.         Execute("WAIT 2 secs ", NULL, Output());
  521.         Execute(currentprj->d.command2, NULL, Output());
  522.         break;
  523.  
  524. /*** Save List ***/
  525. case GD_save:
  526.         {
  527.             save_and_freeprjlist();
  528.             loadprjlist();
  529.         }
  530.         break;
  531.         }
  532. }
  533.  
  534. /* Program start */
  535.  
  536. int main( void )
  537. {
  538.  
  539.         struct IntuiMessage     *im,imsg;
  540.         BOOL   Done = FALSE;
  541.  
  542.         /* Store some data copied from the IntuitionMessage in these variables: */
  543.         USHORT code;           /* Code. */
  544.         ULONG seconds, micros; /* Time. */
  545.  
  546.  
  547.         /* Declare and initialize the time stamps: */
  548.         ULONG sec1 = 0;
  549.         ULONG mic1 = 0;
  550.         ULONG sec2 = 0;
  551.         ULONG mic2 = 0;
  552.  
  553.         SetupScreen();
  554.         OpenProject0Window();
  555.  
  556.         loadprjlist();
  557.  
  558.         gt_AttachList( Project0Gadgets[GD_list], Project0Wnd, &prjlist );
  559.  
  560.         while( !Done )
  561.         {
  562.  
  563.                 while( !( im=GT_GetIMsg( Project0Wnd->UserPort ) ) )
  564.                         WaitPort( Project0Wnd->UserPort );
  565.  
  566.                     code    = im->Code;
  567.                     seconds = im->Seconds;
  568.                     micros  = im->Micros;
  569.  
  570.                 imsg = *im;
  571.                 GT_ReplyIMsg( im );
  572.  
  573.                 switch( imsg.Class )
  574.                 {
  575.  
  576.                         case IDCMP_CLOSEWINDOW:
  577.                                 Done = TRUE;
  578.                                 break;
  579.  
  580.                         case IDCMP_GADGETUP:
  581.                                 dogadup( &imsg );
  582.                                 break;
  583.  
  584.                         case IDCMP_MOUSEBUTTONS: /* The user pressed/released a mouse button. */
  585.                                 if( code == SELECTDOWN )
  586.                                 {
  587.                                    /* Left button pressed. */
  588.  
  589.                                    /* Save the old time: */
  590.                                     sec2 = sec1;
  591.                                     mic2 = mic1;
  592.  
  593.                                    /* Get the new time: */
  594.                                     sec1 = seconds;
  595.                                     mic1 = micros;
  596.  
  597.                                    /* Check if it was a double-click or not: */
  598.                                 if( DoubleClick( sec2, mic2, sec1, mic1 ) )
  599.                                 {
  600.                                     Execute("RUN >NIL: RequShell ", NULL, Output());
  601.                                    /* Reset the values: */
  602.                                     sec1 = 0;
  603.                                     mic1 = 0;
  604.                                     }
  605.                                 }
  606.                                 break;
  607.  
  608.  
  609.                         case IDCMP_REFRESHWINDOW:
  610.                                 GT_BeginRefresh( Project0Wnd );
  611.                                 GT_EndRefresh( Project0Wnd, TRUE );
  612.                                 break;
  613.  
  614.                 }
  615.  
  616.         }
  617.  
  618.         CloseProject0Window();
  619.         CloseDownScreen();
  620.  
  621.         save_and_freeprjlist();
  622.  
  623.         return(0);
  624. }
  625.  
  626.  
  627.  
  628.  
  629.  
  630.